<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of UsuarioBO
 *
 * @author thales
 */
class VendasBO {
    private $tipoOperacao;
    private $tipoPagamento;
    private $destino;
    private $bilhete;
    private $cliente;
    private $conn;
    
    public function __construct() {
        $this->conn     = DB::getConn();
        $this->tipoOperacao   = new TipoOperacaoVO();
        $this->tipoPagamento  = new TipoPagamentoVO();
        $this->destino        = new DestinoVO();
        $this->bilhete        = new BilheteVO();
        $this->cliente        = new ClienteVO();
    }

    public function getTipoOperacao(){
        return $this->tipoOperacao;
    }
    
    public function getTipoPagamento(){
        return $this->tipoPagamento;
    }
    
    public function getDestino(){
        return $this->destino;
    }
    
    public function getBilhete(){
        return $this->bilhete;
    }
    
    public function getCliente(){
        return $this->cliente;
    }
    
    public static function pegarDadosPelaDescricao($descricao){

        if (strlen($descricao) < 3 ) {
            throw new UserException('Digite uma descrição com mais de 03 (três) caracteres para a pesquisa!');
        }
        
        $objTipoOperacaoBO = new VendasBO();
        
        $descricao = $descricao . '%';
        
        $objTipoOperacaoBO->getTipoOperacao()->setDescricao($descricao);

        $objTipoOperacaoDAO = new TipoOperacaoDAO();
        
        $resultado = $objTipoOperacaoDAO->pesquisarDados($objTipoOperacaoBO);
        
        if ( empty ($resultado) ) {
            throw new UserException('Nenhum resultado encontrado!');
        }
     
        return $resultado;
    }
    
    public static function pegarDadosPelaDescricaoPagamento($descricao){

        if (strlen($descricao) < 3 ) {
            throw new UserException('Digite uma descrição com mais de 03 (três) caracteres para a pesquisa!');
        }
        
        $objTipoPagamentoBO = new VendasBO();
        
        $descricao = $descricao . '%';
        
        $objTipoPagamentoBO->getTipoPagamento()->setDescricao($descricao);

        $objTipoPagamentoDAO = new TipoPagamentoDAO();
        
        $resultado = $objTipoPagamentoDAO->pesquisarDados($objTipoPagamentoBO);
        
        if ( empty ($resultado) ) {
            throw new UserException('Nenhum resultado encontrado!');
        }
     
        return $resultado;
    }
    
    public static function pegarTodosDestinos(){
        
        $objDestinoDAO = new DestinoDAO();
        
        $resultado = $objDestinoDAO->pesquisarTodos();
        
        if ( empty ($resultado) ) {
            throw new UserException('Nenhum resultado encontrado!');
        }
     
        return $resultado;
    }
    
    public static function pegarTodosPagamentos(){
        
        $objPagamentoDAO = new TipoPagamentoDAO();
        
        $resultado = $objPagamentoDAO->pesquisarTodos();
        
        if ( empty ($resultado) ) {
            throw new UserException('Nenhum resultado encontrado!');
        }
     
        return $resultado;
    }
    
    public static function pegarTodosOperacao(){
        
        $objOperacaoDAO = new TipoOperacaoDAO();
        
        $resultado = $objOperacaoDAO->pesquisarTodos();
        
        if ( empty ($resultado) ) {
            throw new UserException('Nenhum resultado encontrado!');
        }
     
        return $resultado;
    }
    
    public static function pegarDadosPelaDescricaoDestino($descricao){

        if (strlen($descricao) < 3 ) {
            throw new UserException('Digite uma descrição com mais de 03 (três) caracteres para a pesquisa!');
        }
        
        $objDestinoBO = new VendasBO();
        
        $descricao = $descricao . '%';
        
        $objDestinoBO->getDestino()->setDescricao($descricao);

        $objDestinoDAO = new DestinoDAO();
        
        $resultado = $objDestinoDAO->pesquisarDados($objDestinoBO);
        
        if ( empty ($resultado) ) {
            throw new UserException('Nenhum resultado encontrado!');
        }
     
        return $resultado;
    }
    
    public static function pegarDadosPeloLocalizadorBilhete($localizador){

        if (strlen($localizador) < 3 ) {
            throw new UserException('Digite um localizador com mais de 03 (três) caracteres para a pesquisa!');
        }
        
        $objBilheteBO = new VendasBO();
        
        $localizador = $localizador . '%';
        
        $objBilheteBO->getBilhete()->setLocalizador($localizador);

        $objBilheteDAO = new BilheteDAO();
        
        $resultado = $objBilheteDAO->pesquisarDados($objBilheteBO);
        
        if ( empty ($resultado) ) {
            throw new UserException('Nenhum resultado encontrado!');
        }
     
        return $resultado;
    }
    
    public static function pegarDados($idDescricao){
        
        if ( !is_numeric($idDescricao) && $idDescricao < 1 ) {
            throw new UserException('Tipo de operação inválida!');
        }
        
        $objTipoOperacaoBO = new VendasBO();
        $objTipoOperacaoBO->getTipoOperacao()->setId($idDescricao);
        
        $objTipoOperacaoDAO = new TipoOperacaoDAO();
        if ( !$objTipoOperacaoDAO->pesquisar($objTipoOperacaoBO) ){
            throw new UserException('Não foi possível pegar os dados do tipo de operação!');
        }
        
        return $objTipoOperacaoBO;
    }
    
    public static function pegarDadosPagamento($idDescricao){
        
        if ( !is_numeric($idDescricao) && $idDescricao < 1 ) {
            throw new UserException('Tipo de pagamento inválido!');
        }
        
        $objTipoPagamentoBO = new VendasBO();
        $objTipoPagamentoBO->getTipoPagamento()->setId($idDescricao);
        
        $objTipoPagamentoDAO = new TipoPagamentoDAO();
        if ( !$objTipoPagamentoDAO->pesquisar($objTipoPagamentoBO) ){
            throw new UserException('Não foi possível pegar os dados do tipo de pagamento!');
        }
        
        return $objTipoPagamentoBO;
    }
    
    public static function pegarDadosDestino($idDescricao){
        
        if ( !is_numeric($idDescricao) && $idDescricao < 1 ) {
            throw new UserException('Destino inválido!');
        }
        
        $objDestinoBO = new VendasBO();
        $objDestinoBO->getDestino()->setId($idDescricao);
        
        $objDestinoDAO = new DestinoDAO();
        if ( !$objDestinoDAO->pesquisar($objDestinoBO) ){
            throw new UserException('Não foi possível pegar os dados do tipo de pagamento!');
        }
        
        return $objDestinoBO;
    }
    
    public static function pegarDadosBilhete($idBilhete){
        
        if ( !is_numeric($idBilhete) && $idBilhete < 1 ) {
            throw new UserException('Bilhete inválido!');
        }
        
        $objBilheteBO = new VendasBO();
        $objBilheteBO->getBilhete()->setId($idBilhete);
        
        $objBilheteDAO = new BilheteDAO();
        if ( !$objBilheteDAO->pesquisar($objBilheteBO) ){
            throw new UserException('Não foi possível pegar os dados do tipo de pagamento!');
        }
        
        return $objBilheteBO;
    }
    
    public function atualizarTipoOperacao($id,$descricao) {

        $this->getTipoOperacao()->setId($id);
        $this->getTipoOperacao()->setDescricao($descricao);
        
        $objTipoOperacaoDAO = new TipoOperacaoDAO();
        
        $this->conn->beginTransaction();
        
        if ( !$objTipoOperacaoDAO->alterar($this->getTipoOperacao()) ){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do tipo de operação!');
        }
        
        $this->conn->commit();

    }
    
    public function atualizarTipoPagamento($id,$descricao) {

        $this->getTipoPagamento()->setId($id);
        $this->getTipoPagamento()->setDescricao($descricao);
        
        $objTipoPagamentoDAO = new TipoPagamentoDAO();
        
        $this->conn->beginTransaction();
        
        if ( !$objTipoPagamentoDAO->alterar($this->getTipoPagamento()) ){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do tipo de pagamento!');
        }
        
        $this->conn->commit();

    }
    
    public function atualizarDestino($id,$descricao) {

        $this->getDestino()->setId($id);
        $this->getDestino()->setDescricao($descricao);
        
        $objDestinoDAO = new DestinoDAO();
        
        $this->conn->beginTransaction();
        
        if ( !$objDestinoDAO->alterar($this->getDestino()) ){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do destino!');
        }
        
        $this->conn->commit();

    }
    
    public function atualizarBilhete($id,$localizador,$data_emissao,$cia_aerea,$dt_ida,$dt_volta,
                                         $num_bilhete,$val_du,$tx_embarque,$val_pagar,$val_receber,
                                         $val_multa_pontos,$val_multa_moeda,$meta_domestica,
                                         $percent_domestico,$cliente_id,$tipo_pagamento_id,
                                         $tipo_operacao_id,$origem,$destino){
        
        $val_du             = str_replace(',', '.', $val_du);
        $tx_embarque        = str_replace(',', '.', $tx_embarque);
        $val_pagar          = str_replace(',', '.', $val_pagar);
        $val_receber        = str_replace(',', '.', $val_receber);
        $val_multa_pontos   = str_replace(',', '.', $val_multa_pontos);
        $val_multa_moeda    = str_replace(',', '.', $val_multa_moeda);
        $percent_domestico  = str_replace(',', '.', $percent_domestico);

        $this->getBilhete()->setId($id);
        $this->getBilhete()->setLocalizador($localizador);
        $this->getBilhete()->setDataEmissao($data_emissao);
        $this->getBilhete()->setCiaAerea($cia_aerea);
        $this->getBilhete()->setDtIda($dt_ida);
        $this->getBilhete()->setDtVolta($dt_volta);
        $this->getBilhete()->setNumBilhete($num_bilhete);
        $this->getBilhete()->setValDu($val_du);
        $this->getBilhete()->setTxEmbarque($tx_embarque);
        $this->getBilhete()->setValPagar($val_pagar);
        $this->getBilhete()->setValReceber($val_receber);
        $this->getBilhete()->setValMultaPontos($val_multa_pontos);
        $this->getBilhete()->setValMultaMoeda($val_multa_moeda);
        $this->getBilhete()->setMetaDomestica($meta_domestica);
        $this->getBilhete()->setPercentDomestico($percent_domestico);
        if($cliente_id){
            $this->getBilhete()->setClienteId($cliente_id);
        }
        $this->getBilhete()->setTipoPagamentoId($tipo_pagamento_id);
        $this->getBilhete()->setTipoOperacaoId($tipo_operacao_id);
        $this->getBilhete()->setOrigem($origem);
        $this->getBilhete()->setDestino($destino);
        $this->getBilhete()->setId($id);
        
        $objBilheteDAO = new BilheteDAO();
        
        $this->conn->beginTransaction();
        
        if ( !$objBilheteDAO->alterar($this->getBilhete()) ){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do destino!');
        }
        
        $this->conn->commit();

    }
    
    public function salvarTipoOperacao($descricao){
        
        $this->getTipoOperacao()->setDescricao($descricao);
        
        $objTipoOperacaoDAO = new TipoOperacaoDAO();
        
        $this->conn->beginTransaction();
        
        if(!$objTipoOperacaoDAO->salvar($this->getTipoOperacao())){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do tipo da operação!');
        }
        
        $this->conn->commit();
        
        return true;
    }
    
    public function salvarBilhete($localizador,$data_emissao,$cia_aerea,$dt_ida,$dt_volta,
                                         $num_bilhete,$val_du,$tx_embarque,$val_pagar,$val_receber,
                                         $val_multa_pontos,$val_multa_moeda,$meta_domestica,
                                         $percent_domestico,$cliente_id,$tipo_pagamento_id,
                                         $tipo_operacao_id,$origem,$destino){

        $val_du             = str_replace(',', '.', $val_du);
        $tx_embarque        = str_replace(',', '.', $tx_embarque);
        $val_pagar          = str_replace(',', '.', $val_pagar);
        $val_receber        = str_replace(',', '.', $val_receber);
        $val_multa_pontos   = str_replace(',', '.', $val_multa_pontos);
        $val_multa_moeda    = str_replace(',', '.', $val_multa_moeda);
        $percent_domestico  = str_replace(',', '.', $percent_domestico);
        
        $this->getBilhete()->setLocalizador($localizador);
        $this->getBilhete()->setDataEmissao($data_emissao);
        $this->getBilhete()->setCiaAerea($cia_aerea);
        $this->getBilhete()->setDtIda($dt_ida);
        $this->getBilhete()->setDtVolta($dt_volta);
        $this->getBilhete()->setNumBilhete($num_bilhete);
        $this->getBilhete()->setValDu((float)$val_du);
        $this->getBilhete()->setTxEmbarque((float)$tx_embarque);
        $this->getBilhete()->setValPagar((float)$val_pagar);
        $this->getBilhete()->setValReceber((float)$val_receber);
        $this->getBilhete()->setValMultaPontos((float)$val_multa_pontos);
        $this->getBilhete()->setValMultaMoeda((float)$val_multa_moeda);
        $this->getBilhete()->setMetaDomestica((float)$meta_domestica);
        $this->getBilhete()->setPercentDomestica((float)$percent_domestico);
        $this->getBilhete()->setClienteId($cliente_id);
        $this->getBilhete()->setTipoPagamentoId($tipo_pagamento_id);
        $this->getBilhete()->setTipoOperacaoId($tipo_operacao_id);
        $this->getBilhete()->setOrigem($origem);
        $this->getBilhete()->setDestino($destino);
        
        $objBilheteDAO = new BilheteDAO();
        
        $this->conn->beginTransaction();
        
        if(!$objBilheteDAO->salvar($this->getBilhete())){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do bilhete!');
        }
        
        $this->conn->commit();
        
        return true;
    }
    
    public function salvarDestino($descricao){
        
        $this->getDestino()->setDescricao($descricao);
        
        $objDestinoDAO = new DestinoDAO();
        
        $this->conn->beginTransaction();
        
        if(!$objDestinoDAO->salvar($this->getDestino())){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do destino!');
        }
        
        $this->conn->commit();
        
        return true;
    }
    
    public function salvarTipoPagamento($descricao){
        
        $this->getTipoPagamento()->setDescricao($descricao);
        
        $objTipoPagamentoDAO = new TipoPagamentoDAO();
        
        $this->conn->beginTransaction();
        
        if(!$objTipoPagamentoDAO->salvar($this->getTipoPagamento())){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do tipo do pagamento!');
        }
        
        $this->conn->commit();
        
        return true;
    }
    
    public function excluirTipoOperacao($id){
        
       $objTipoOperacaoVO = $this->getTipoOperacao();
       $objTipoOperacaoVO->setId($id);
       
       $objTipoOperacaoDAO = new TipoOperacaoDAO();
       
       //inicia transação
       $this->conn->beginTransaction();
       
       if ( !$objTipoOperacaoDAO->excluir($objTipoOperacaoVO) ){
           $this->conn->rollBack();
           throw new UserException('Não foi possível excluir o tipo de operação!');
       }
       
       $this->conn->commit();
    }
    
    public function excluirTipoPagamento($id){
        
       $objTipoPagamentoVO = $this->getTipoPagamento();
       $objTipoPagamentoVO->setId($id);
       
       $objTipoPagamentoDAO = new TipoPagamentoDAO();
       
       //inicia transação
       $this->conn->beginTransaction();
       
       if ( !$objTipoPagamentoDAO->excluir($objTipoPagamentoVO) ){
           $this->conn->rollBack();
           throw new UserException('Não foi possível excluir o tipo de operação!');
       }
       
       $this->conn->commit();
    }
    
    public function excluirDestino($id){
        
       $objDestinoVO = $this->getDestino();
       $objDestinoVO->setId($id);
       
       $objDestinoDAO = new DestinoDAO();
       
       //inicia transação
       $this->conn->beginTransaction();
       
       if ( !$objDestinoDAO->excluir($objDestinoVO) ){
           $this->conn->rollBack();
           throw new UserException('Não foi possível excluir o tipo de operação!');
       }
       
       $this->conn->commit();
    }
    
    public function excluirBilhete($id){
        
       $objBilheteVO = $this->getBilhete();
       $objBilheteVO->setId($id);
       
       $objBilheteDAO = new BilheteDAO();
       
       //inicia transação
       $this->conn->beginTransaction();
       
       if ( !$objBilheteDAO->excluir($objBilheteVO) ){
           $this->conn->rollBack();
           throw new UserException('Não foi possível excluir o bilhete!');
       }
       
       $this->conn->commit();
    }
    
}

?>
